package CarLease.service;

import CarLease.entity.Car;

import java.util.*;

public class RentalSystem implements CarOperations {
    //存储所有汽车的集合，key为汽车编号，value为汽车对象
    private final Map<String, Car> carMap;

    //构造方法,初始化carMap
    public RentalSystem()
    {
        this.carMap = new HashMap<>();
    }

    //添加汽车到系统
    @Override
    public void addCar(Car car)
    {
        //判断汽车编号是否已经存在
        if(!carMap.containsKey(car.getCarId()))
        {
            carMap.put(car.getCarId(),car);
            System.out.println("汽车添加成功！");
        }
        else
        {
            System.out.println("汽车编号已经存在，添加失败！");
        }
    }

    // 根据指定的方式排序并显示所有汽车
    @Override
    public void viewCars(String sortBy) {
        // 将所有汽车转换为列表
        List<Car> cars = new ArrayList<>(carMap.values());
        // 根据排序方式排序
        switch (sortBy) {
            case "price":
                cars.sort(Comparator.comparingDouble(Car::getPrice));
                break;
            case "CardId":
                cars.sort(Comparator.comparing(Car::getCarId));
                break;
            case "displacement":
                cars.sort(Comparator.comparingDouble(Car::getDisplacement));
                break;
            default:
                System.out.println("排序方式输入错误：");
                return;
        }

        // 显示所有汽车信息
        for (Car car : cars) {
            car.showInfo();
            System.out.println("-----------------------------");
        }
    }

    // 根据车牌号删除汽车
    @Override
    public void deleteCar(String carId)
    {
        if(carMap.containsKey(carId))
        {
            carMap.remove(carId);
            System.out.println("汽车删除成功！");
        }
        else
        {
            System.out.println("汽车不存在，删除失败！");
        }
    }

    // 租赁汽车，显示总租金
    @Override
    public void rentCar(String licensePlate, int days) {
        Car car = carMap.get(licensePlate); // 根据车牌号查找汽车
        if (car == null) { // 检查汽车是否存在
            System.out.println("汽车并不存在！");
            return;
        }

        if (car.isRented()) { // 检查汽车是否已出租
            System.out.println("不好意思，汽车已出租。");
        } else {
            car.setRented(true); // 设置汽车为已出租
            double totalRent = car.calculateRent(days); // 计算总租金
            System.out.println("租金为: " + totalRent);
        }
    }

    // 归还汽车，更新汽车状态
    @Override
    public void returnCar(String licensePlate) {
        Car car = carMap.get(licensePlate); // 根据车牌号查找汽车
        if (car == null) { // 检查汽车是否存在
            System.out.println("该汽车并不存在。");
            return;
        }

        if (!car.isRented()) { // 检查汽车是否已出租
            System.out.println("不好意思，汽车已出租。");
        } else {
            car.setRented(false); // 设置汽车为未出租
            System.out.println("汽车，已成功归还。");
        }
    }

    // 打印操作菜单
    public void printMenu() {
        System.out.println("1. 添加汽车");
        System.out.println("2. 排序");
        System.out.println("3. 移除汽车");
        System.out.println("4. 租赁租金");
        System.out.println("5. 归还汽车");
        System.out.println("0. 结束");
    }
}

